﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Projeto.Classes.Conexao;
using Projeto.Classes.Objeto;
using Projeto.Utilidades;

namespace Projeto.Formularios
{
    public partial class frmRegistroDescarte : Form
    {
        public frmRegistroDescarte()
        {
            InitializeComponent();
        }

        private Classes.Conexao.Descarte desc = new Classes.Conexao.Descarte();
        private Classes.Objeto.Descarte descValue = new Classes.Objeto.Descarte();
        private bool IsCalledBySearch = false;

        private void clearForm() 
        {
            txtMotivo.Clear();
            mtxtData.Text = "";
            numQuantidade.Value = 1;
            cbProduto.SelectedIndex = 0;
            cbResponsavel.SelectedIndex = 0;
            cbTipoDescarte.SelectedIndex = 0;
        }

        public void loadInfoFromSearch(Classes.Objeto.Descarte value)
        {
            cbProduto.DropDownStyle = ComboBoxStyle.DropDown;
            cbResponsavel.DropDownStyle = ComboBoxStyle.DropDown;
            cbTipoDescarte.DropDownStyle = ComboBoxStyle.DropDown;
            cbProduto.Text = value.ds_produto;
            cbResponsavel.Text = value.ds_responsavel;
            cbTipoDescarte.Text = value.ds_tipo_descarte;
            numQuantidade.Value = value.qtd_produto;
            mtxtData.Text = value.dt_descarte.ToShortDateString();
            txtMotivo.Text = value.ds_motivo;
            this.IsCalledBySearch = true;
        }

        public void disableFormControls() 
        {
            cbProduto.Enabled = false;
            cbResponsavel.Enabled = false;
            cbTipoDescarte.Enabled = false;
            btnRegistro.Visible = false;
            numQuantidade.Enabled = false;
            mtxtData.Enabled = false;
            txtMotivo.Enabled = false;
        }

        private bool checkSelectedComboValues() 
        {
            List<int> selectedCodes = new List<int>();
            selectedCodes.Add(Convert.ToInt32(cbResponsavel.SelectedValue));
            selectedCodes.Add(Convert.ToInt32(cbTipoDescarte.SelectedValue));
            selectedCodes.Add(Convert.ToInt32(cbProduto.SelectedValue));
            foreach (int value in selectedCodes)
            {
                if (value < 1)
                {
                    return false;
                }
            }
            return true;
        }

        private void loadObject() 
        {
            descValue.id_responsavel = Convert.ToInt32(cbResponsavel.SelectedValue);
            descValue.id_tipo_descarte = Convert.ToInt32(cbTipoDescarte.SelectedValue);
            descValue.id_produto = Convert.ToInt32(cbProduto.SelectedValue);
            descValue.qtd_produto = Convert.ToInt32(numQuantidade.Value);
            descValue.dt_descarte = DateTime.Now;
            descValue.ds_motivo = txtMotivo.Text;
        }

        private void frmRegistroDescarte_Load(object sender, EventArgs e)
        {
            Classes.Conexao.Produto prod = new Classes.Conexao.Produto();
            Classes.Conexao.Responsavel resp = new Classes.Conexao.Responsavel();
            Classes.Conexao.TipoDescarte tipoDesc = new Classes.Conexao.TipoDescarte();

            //se o form está sendo chamado pelo datagrid, seus dados ja estao carregados, nao precisando caregá-los novamente
            if (!IsCalledBySearch)
            {
                mtxtData.Text = DateTime.Now.ToShortDateString();
                //Carregar combos
                try
                {
                    if (prod.SelectProduto())
                    {
                        cbProduto.DataSource = prod.dataTable;
                        cbProduto.DisplayMember = constants.COLUMN_PROD_DESCR;
                        cbProduto.ValueMember = constants.COLUMN_PROD_ID;
                    }
                    else
                    {
                        throw new Exception();
                    }

                    if (resp.SelectResponsavel())
                    {
                        cbResponsavel.DataSource = resp.dataTable;
                        cbResponsavel.DisplayMember = constants.COLUMN_RESP_NOME;
                        cbResponsavel.ValueMember = constants.COLUMN_RESP_ID;
                    }
                    else
                    {
                        throw new Exception();
                    }

                    if (tipoDesc.SelectTipoDescarte())
                    {
                        cbTipoDescarte.DataSource = tipoDesc.dataTable;
                        cbTipoDescarte.DisplayMember = constants.COLUMN_TIPO_DESC_DESCR;
                        cbTipoDescarte.ValueMember = constants.COLUMN_TIPO_DESC_ID;
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao carregar dados. Contacte o suporte! " + ex.Message, "Erro!");
                    this.Close();
                }
            }
           
                       
           
        }

        private void btnRegistro_Click(object sender, EventArgs e)
        {
            if (!checkSelectedComboValues())
            {
                MessageBox.Show("É obrigatório selecionar um Responsável, um Tipo de Descarte, e um Produto", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else 
            { 
                //realizar registro
                loadObject();
                if (desc.InsertDescarte(descValue))
                {
                    MessageBox.Show("Registro efetuado com sucesso!");
                    clearForm();
                }
                else 
                {
                    MessageBox.Show("Erro! Contacte o suporte.");
                }
            }
        }
    }
}
